#include<iostream>
using namespace std;


// 实现多态的条件
// 1.继承
// 2.函数覆盖（基态、子类拥有相同方法）
// 3.父类中有虚函数
// 4.基类指针或者引用指向派生类的对象


class Test
{
    public:
    Test(){}

    Test(int t) : m_t(t) {}
   

    virtual void printInfo()
    {
        cout<<"是Test"<<endl;

    }
    int m_t; 

};


class TestA :public Test
{
    public:
    TestA(){}
    TestA(int ta):m_ta(ta),Test(1){}
     void printInfo()
     {cout<<"是A哒!"<<endl;}
int m_ta;
}; 

class TestB :public Test
{
    public:
    TestB(){}
    TestB(int tb):m_tb(tb),Test(10){}
     
     void printInfo()
     {cout<<"是B哒!"<<endl;}
int m_tb;
}; 


class Print
{
    public:


    void pirnt(Test& A)
    {
    A.printInfo();
    }

};

int main()
{

    Test t;
    TestA ta;
    TestB tb;

    Print a;
    a.pirnt(ta);

    return 0;
}